<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      const orders = [
        {
          id: 1,
          name: 'John Smith',
          address: '123 Main St',
          status: 'created',
          log: [
            {
              status: 'created',
              time: '2023-02-16 12:30:00',
            },
          ],
        },
        {
          id: 2,
          name: 'Jane Doe',
          address: '456 Second St',
          status: 'packed',
          log: [
            {
              status: 'created',
              time: '2023-02-16 10:00:00',
            },
            {
              status: 'packed',
              time: '2023-02-16 12:30:00',
            },
          ],
        },

        {
          id: 3,
          name: 'Bob Johnson',
          address: '789 Third St',
          status: 'shipped',
          log: [
            {
              status: 'created',
              time: '2023-02-15 10:00:00',
            },
            {
              status: 'packed',
              time: '2023-02-15 12:00:00',
            },
            {
              status: 'shipped',
              time: '2023-02-16 9:00:00',
            },
          ],
        },
      ]
      //第一问自己做的，浅拷贝动了原数据，用老师的,因为数组存的是地址！！！
      // function getOrdersByStatus(status){
      //   //筛选出选定状态的对象，放到result数组中
      //   let result= orders.filter(item=>item.status===status)
      //   // 对筛选出的数组，因为数组可能的对象不职一个，依次遍历直接改log,筛选出log放入原数组
      //   result.forEach(item=>{
      //     item.log=item.log.filter(item=>item.status===status)
      //   })
      //   // 根据id进行排序
      //   result.sort((a,b)=>a.id-b.id)
      //   return result
      // }
      // console.log(getOrdersByStatus('shipped'));
      // 第一问老师做的,用map返回新数组，不会改变原数组
      // function getOrdersByStatus(status) {

      //   let result = orders.filter((item) => item.status === status)
      //   // 对筛选出的数组，因为数组可能的对象不职一个，依次遍历直接改log,筛选出log放入原数组
      //   result=result.map((item) => {
      //     return{
      //       id:item.id,
      //     name: item.name,
      //     address: item.address,
      //     status: item.status,
      //     log:item.log.filter((item) => item.status === status)
      //     }
      //   })
      //   // 根据id进行排序
      //   result.sort((a, b) => a.id - b.id)
      //   return result
      // }
      // console.log(getOrdersByStatus('shipped'))

      // 第二问（因为没学深拷贝直接改变的原数据，两问的两个函数只能同时调用一个，因为函数会改变数组）
      // function getOrderStatusHistory(id) {
      //   //因为id只能有一个，filter接的是数组，直接用[0].log取出log
      //   let result = orders.filter((item) => item.id === id)[0].log
      //   //用时间戳按时间排列
      //   result.sort(
      //     (a, b) => new Date(a.time).getTime() - new Date(b.time).getTime()
      //   )
      //   let time, values, str
      //   let sum = ''
      //   //字符串拼接到sum,再输出sum
      //   result.forEach((item) => {
      //     ;[time, values] = Object.values(item)
      //     str = `[${time}] ${values} \n`
      //     sum += str
      //   })
      //   return sum
      // }
      // console.log(getOrderStatusHistory(3))
      //第二问老师教的
      function getOrderStatusHistory(id) {
        return orders
          .find((item) => item.id === id)
          .log.sort((a, b) => Date(a.time - b.time))
          .map((item) => {
            return `[${item.time}]${item.status}\n`
          })
          .join('')
      }
      console.log(getOrderStatusHistory(3))
    </script>
  </body>
</html>
